import 'package:cbec_app/components/http/network.dart';
import 'package:cbec_app/entity/home/content/coupon_decoration_entity.dart';
import 'package:cbec_app/pages/goods/entity/activity_item_entity.dart';
import 'package:cbec_app/utils/Tools.dart';
import 'package:get/get.dart';

import 'Entity/coupon_widget_item_entity.dart';

class DecorationCouponCtr extends GetxController {
  late CouponDecorationEntity widgetModel;

  RxList<CouponWidgetItemEntity> couponList = <CouponWidgetItemEntity>[].obs;

  void fetchData(CouponDecorationEntity model) {
    widgetModel = model;
    if (model.couponSource == '1') {
      // 手动
      List<CouponDecorationCoupon> coupons = model.coupon ?? [];
      // 过滤出含有 marketingId 字段且非空的项，并组成数组
      List<String> marketingIds = coupons
          .where((coupon) => coupon.marketingId != null) // 过滤出 marketingId 不为 null 的项
          .map((coupon) => coupon.marketingId!) // 提取 marketingId 字段，并用 `!` 解包
          .toList();
      fetchCouponsList(marketingIds);
    } else {
      // 自动
      getActivityTimes();
    }
  }

  //获取时间列表
  Future getActivityTimes() async {
    Network.getActivityTimes("11").then((value) {
      final List<ActivityItemEntity> itemList = value
          .map((item) => _tryParseActivityItem(item)) // 使用辅助方法解析
          .whereType<ActivityItemEntity>() // 自动过滤 null 并转换类型
          .toList();

      List<String> marketingIds = itemList
          .where((coupon) => coupon.marketingId != null) // 过滤出 marketingId 不为 null 的项
          .map((coupon) => coupon.marketingId!) // 提取 marketingId 字段，并用 `!` 解包
          .toList();

      fetchCouponsList(marketingIds);
    }).catchError((error) {
      //print('优惠券获取时间列表Error ====== $error');
    });
  }

  void fetchCouponsList(List<String> marketingIds) {
    Map<String, dynamic> params = {};
    params['marketingIds'] = marketingIds;
    Network.automaticGainCouponList(params).then((value) {
      // print('fetchCouponsList 列表数据===== $value');
      try {
        // 解析 JSON 数据
        final List<CouponWidgetItemEntity> newList = value.map<CouponWidgetItemEntity>((item) => CouponWidgetItemEntity.fromJson(item)).toList();

        print('fetchCouponsList 列表数据===== $newList');

        couponList.assignAll(newList);
      } catch (e) {
        // 捕获 JSON 解析错误
        print('JSON 解析失败: $e');
      }
    }).catchError((error) {
      print('列表数据Error===== $error');
    });
  }

  ///领券
  Future receiveCoupon(String couponId) async {
    // print(couponId);
    Tools.showLoading();
    Network.receiveCoupon(couponId).then((value) {
      if (value == true) {
        Tools.showToast("领券成功");
        fetchData(widgetModel);
        Tools.hideLoading();
      }
    }).catchError((error) {
      Tools.hideLoading();
    });
  }

  // 辅助方法
  ActivityItemEntity? _tryParseActivityItem(dynamic item) {
    try {
      return ActivityItemEntity.fromJson(item);
    } catch (e) {
      return null; // 转换失败时返回 null
    }
  }
}
